home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1994 March / Internet Info CD-ROM (Walnut Creek) (March 1994).iso / networking / ip / ka9q / src890906.arc / SOCKET.H < prev    next >
C/C++ Source or Header  |  1989-08-18  |  4KB  |  148 lines

  1. #ifndef    SOCK_STREAM
  2.  
  3. #include "global.h"
  4.  
  5. /* IP protocol numbers */
  6. #define    IPPROTO_ICMP    1
  7. #define    IPPROTO_TCP    6
  8. #define    IPPROTO_UDP    17
  9.  
  10. /* TCP port numbers */
  11. #define    IPPORT_ECHO    7    /* Echo data port */
  12. #define    IPPORT_DISCARD    9    /* Discard data port */
  13. #define    IPPORT_FTPD    20    /* FTP Data port */
  14. #define    IPPORT_FTP    21    /* FTP Control port */
  15. #define IPPORT_TELNET    23    /* Telnet port */
  16. #define IPPORT_SMTP    25    /* Mail port */
  17. #define    IPPORT_FINGER    79    /* Finger port */
  18.  
  19. /* UDP port numbers */
  20. #define    IPPORT_DOMAIN    53
  21. #define    IPPORT_REMOTE    1234    /* Pulled out of the air */
  22.  
  23. #define    AF_INET    0
  24. #define    AF_AX25    1
  25. #define AF_NETROM 2
  26.  
  27. #define    SOCK_STREAM    0
  28. #define    SOCK_DGRAM    1
  29. #define    SOCK_RAW    2
  30. #define SOCK_SEQPACKET    3
  31.  
  32. #define    EMFILE    1
  33. #define    EBADF    2
  34. #define    EINVAL    3
  35. #define    ESOCKTNOSUPPORT    4
  36. #define    EAFNOSUPPORT    5
  37. #define    EOPNOTSUPP    6
  38. #define    EFAULT        7
  39. #define    ENOTCONN    8
  40. #define    ECONNREFUSED    9
  41. #define EAFNOSUPP    10
  42. #define    EISCONN        11
  43. #define    EWOULDBLOCK    12
  44. #define    EINTR        13
  45. #define    EADDRINUSE    14
  46. #define    ENOMEM        15
  47. #define EMSGSIZE    16
  48.  
  49. /* Berkeley format socket address structures. These things were rather
  50.  * poorly thought out, but compatibility is important (or so they say).
  51.  * Note that all the sockaddr variants must be of the same size, 16 bytes
  52.  * to be specific. Although attempts have been made to account for alignment
  53.  * requirements (notably in sockaddr_ax), porters should check each
  54.  * structure.
  55.  */
  56.  
  57. /* Generic socket address structure */
  58. struct sockaddr {
  59.     short sa_family;
  60.     char sa_data[14];
  61. };
  62.  
  63. /* This is a structure for "historical" reasons (whatever they are) */
  64. struct in_addr {
  65.     unsigned long s_addr;
  66. };
  67.  
  68. /* Socket address, DARPA Internet style */
  69. struct sockaddr_in {
  70.     short sin_family;
  71.     unsigned short sin_port;
  72.     struct in_addr sin_addr;
  73.     char sin_zero[8];
  74. };
  75.  
  76. /* AX.25 sockaddr stuff */
  77. /* Number of chars in callsign field */
  78. #define    ALEN        6
  79.  
  80. #ifndef NULLAXADDR
  81. struct ax25_addr {
  82.     char call[ALEN];
  83.     char ssid;
  84. };
  85. #endif
  86. /* Number of chars in interface field. The involved definition takes possible
  87.  * alignment requirements into account, since ax25_addr is of an odd size.
  88.  */
  89. #define    ILEN    (sizeof(struct sockaddr) - sizeof(short) - sizeof(struct ax25_addr))
  90.  
  91. /* Socket address, AX.25 style */
  92. struct sockaddr_ax {
  93.     short sax_family;        /* 2 bytes */
  94.     struct ax25_addr ax25_addr;
  95.     char iface[ILEN];        /* Interface name */
  96. };
  97.  
  98. /* Netrom socket address.
  99.  * It is tempting to use two struct ax25_addr here, but that would not
  100.  * fulfil the size requirements */
  101. #ifndef NR4MAXCIRC
  102. struct nr4_addr {
  103.     char user_call[ALEN];
  104.     char user_ssid;
  105.     char node_call[ALEN];
  106.     char node_ssid;
  107. };
  108. #endif
  109.  
  110. struct sockaddr_nr {
  111.     short nr_family;
  112.     struct nr4_addr nr_addr;
  113. };
  114.  
  115. #define    SOCKSIZE    (sizeof(struct sockaddr))
  116. #define MAXSOCKSIZE    SOCKSIZE /* All sockets are of the same size for now */
  117.  
  118. extern int32 Ip_addr;
  119. /* In socket.c: */
  120. int accept __ARGS((int s,char *peername,int *peernamelen));
  121. int bind __ARGS((int s,char *name,int namelen));
  122. int close_s __ARGS((int s));
  123. int connect __ARGS((int s,char *peername,int peernamelen));
  124. void freesock __ARGS((struct proc *pp));
  125. int getpeername __ARGS((int s,char *peername,int *peernamelen));
  126. int getsockname __ARGS((int s,char *name,int *namelen));
  127. int listen __ARGS((int s,int backlog));
  128. char *psocket __ARGS((void *p));
  129. int recv __ARGS((int s,char *buf,int len,int flags));
  130. int recv_mbuf __ARGS((int s,struct mbuf **bpp,int len,int flags,char *from,int *fromlen));
  131. int recvchar __ARGS((int s,struct mbuf **bpp));
  132. int recvline __ARGS((int s,char *buf,unsigned len));
  133. int recvfrom __ARGS((int s,char *buf,int len,int flags,char *from,int *fromlen));
  134. int send __ARGS((int s,char *buf,int len,int flags));
  135. int send_mbuf __ARGS((int s,struct mbuf *bp,int flags,char *to,int tolen));
  136. int sendto __ARGS((int s,char *buf,int len,int flags,char *to,int tolen));
  137. int shutdown __ARGS((int s,int how));
  138. char *sockerr __ARGS((int s));
  139. int socket __ARGS((int af,int type,int protocol));
  140. void sockinit __ARGS((void));
  141. int sockkick __ARGS((int s));
  142. int socklen __ARGS((int s,int rtx));
  143. struct proc *sockowner __ARGS((int s,struct proc *newowner));
  144. char *sockstate __ARGS((int s));
  145. int usprintf __ARGS((int s,char *fmt,...));
  146.  
  147. #endif    /* SOCK_STREAM */
  148.